#pragma once

#include "DAEFloat3.h"
#include "ObjMesh.h"

/**
* Visualization of a cone as a wireframe.
* This class can be useful when trying to debug spotlights.
*/ 
class ConeMesh
{
public:
	/**
	* Creates a new ConeMesh at the specified position.
	* @param position the position of the cone mesh.
	* @param direction the direction of the cone mesh.
	* @param angle the angle of the cone mesh.
	* @param height the height of the cone mesh.
	* @param lengthSegments the number of segments in the length.
	* @param sides the number of sides for the cone. 
	* @param color the color for the cone object.
	*/
	ConeMesh(DAEFloat3 position, DAEFloat3 direction, float angle, float height, unsigned int lengthSegments, unsigned int sides,DAEFloat3 color);
	/**
	* Deletes the ConeMesh object.
	*/
	virtual ~ConeMesh(void);
	/**
	* Returns the cone mesh object.
	* @return the cone mesh.
	*/
	ObjMesh* GetObjMesh(){
		return m_pMesh;
	}

private:
	DAEFloat3 m_Position;
	DAEFloat3 m_Direction;
	DAEFloat3 m_Color;
	float m_Angle;
	float m_Height;
	unsigned int m_HeightSegments;
	unsigned int m_Sides;

	ObjMesh* m_pMesh;
	// -------------------------
	// Disabling default copy constructor and default assignment operator.
	// If you get a linker error from one of these functions, your class is internally trying to use them. This is
	// an error in your class, these declarations are deliberately made without implementation because they should never be used.
	// -------------------------
	ConeMesh(const ConeMesh& t);
	ConeMesh& operator=(const ConeMesh& t);
};

